<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <script>
        // promise是es6新增解决异步回调地狱问题方法
        // function  a(bfn) {
        //   console.log(111);
        //   bfn(function () {  
        //       console.log(333)
        //   })
        // }
        //   a(function (cfn) { 
        //       console.log(222)
        //       cfn()
        //    })
        //    $.ajax({
        //     url:"/list",
        //     sccess(){
        //         $.ajax({
        //           url:"122",
        //           success(){

        //           }
        //         })
        //     }
        //    })
          // 1.promise是es6新增解决异步回调地狱问题方法
          //  promise 有三种状态 pending（进行中）、fulfilled（已成功）和rejected（已失败）。只有异步操作的结果，可以决定当前是哪一种状态，任何其他操作都无法改变这个状态。  
          //  对象的状态一旦改变，就不会再变，任何时候都可以得到这个结果
          // 2. promise的resolve是用来返回成功的结果
                // promise的reject是用来返回失败的结果
                // then方法是用来接受成功的结果
                // catch接受失败的结果
                // finally 是总是执行的函数
          // 3.promise还有静态方法 如all 同时执行多个异步操作 统一
          // 返回结果 race 同时执行多个异步操作 优先返回执行快速的结果
          // promise.resolve() promise.reject()
          // promise应用场景 经常用来封装插件

          let p=new Promise((resolve,reject)=>{
              // resolve 在异步操作成功时调用 返回成功结果
              // reject 在异步操作失败时调用 返回失败结果
              let age=17;
              if(age>18){
                resolve("成年")
              }else{
                reject("未成年")
              }
          })
          // promise的实例方法 是链式操作方法
            // 1) then 接受成功的数据
            // 2) catch 接受失败的数据
          p.then(res=>{
            console.log(res)
          }).catch(err=>{
            console.log(err)
          })
      // 异步操作
          // 宏任务： setTimeout setInterval ajax script
          //          dom事件 
          // 微任务   promise.then() process.nextTick()


         function fn1() {
            let a="hello"
            return new Promise((resolve,reject)=>{
                setTimeout(() => {
                    resolve(a)
                }, 2000);
            })
          }
            fn1().then(res=>{
              console.log(res)
            })






    </script>
</body>
</html>